package cn.lingyangwl.agile.pay.model.rqrs.pay;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.ResponseEntity;

import java.io.Serializable;

/**
 * 上游渠道侧响应信息包装类
 */
@Slf4j
@Data
public class ChannelRetMsg implements Serializable {

    /**
     * 上游渠道返回状态
     */
    protected ChannelState channelState;

    /**
     * 渠道订单号
     */
    protected String channelOrderId;

    /**
     * 渠道用户标识
     */
    protected String channelUserId;

    /**
     * 渠道错误码
     */
    protected String channelErrCode;

    /**
     * 渠道错误描述
     */
    protected String channelErrMsg;

    /**
     * 渠道支付数据包, 一般用于支付订单的继续支付操作
     */
    protected String channelAttach;

    /**
     * 上游渠道返回的原始报文, 一般用于[运营平台的查询上游结果]功能
     */
    protected String channelOriginResponse;

    /**
     * 是否需要轮询查单（比如微信条码支付） 默认不查询订单
     */
    protected boolean isNeedQuery = false;

    /**
     * 响应结果（一般用于回调接口返回给上游数据 ）
     */
    protected ResponseEntity<?> responseEntity;

    // 渠道状态枚举值
    public enum ChannelState {
        CONFIRM_SUCCESS, //接口正确返回： 业务状态已经明确成功
        CONFIRM_FAIL, //接口正确返回： 业务状态已经明确失败
        WAITING, //接口正确返回： 上游处理中， 需通过定时查询/回调进行下一步处理
        UNKNOWN, //接口超时，或网络异常等请求， 或者返回结果的签名失败： 状态不明确 ( 上游接口变更, 暂时无法确定状态值 )
        API_RET_ERROR, //渠道侧出现异常( 接口返回了异常状态 )
        SYS_ERROR //本系统出现不可预知的异常
    }

    //静态初始函数
    public ChannelRetMsg() {
    }

    public boolean isFail() {
        return StringUtils.isNotEmpty(this.channelErrCode);
    }
}





